package pictureseditor.effects.effectsimpl;

import pictureseditor.effects.Effect;
import pictureseditor.exceptions.NullImageException;
import pictureseditor.images.Image;

/**
 * Cette classe prend une Image en attibut et inverse ses couleurs.
 */
public class EffectReverseColors extends Effect {
	
	  /////////////////
	 // CONSTRUCTOR //
	/////////////////
	
	public EffectReverseColors(Image img) {
		super(img);
	}
	
	  ////////////
	 // PUBLIC //
	////////////

	/** Applique l'effect d'inversion des couleurs */
	@Override
	public Image apply() throws NullImageException {
		if(getImage()==null) throw new NullImageException("load an image before applying effect");
		Image result = getResult();
		if(result.getProfondeur()!=getImage().getProfondeur()) result.changeProfondeur(getImage().getProfondeur());
		char newPixelValue;
		for(int p=0; p<getImage().getProfondeur(); p++) {
			for(int l=0; l<getImage().getLargeur(); l++) {
				for(int h=0; h<getImage().getHauteur(); h++) {
					newPixelValue = (char) (255-getImage().getPixel(p, l, h));
					result.setPixel(p, l, h, newPixelValue);
		}   }   }
		return result;
	}
	
	@Override
	public String toString() {
		return "[EffectReverseColor]";
	}
	
}
